<?php
/*

  Форм-процессор
  * see http://in.jetstyle.ru/rocket/rocketforms

  FormComponent_validator_upload( &$config )
      - $field -- $field->config instance-a поля

  -------------------

  * validator   : для файлов. Умеет:
                  + <validator_base>
                  + maxsize ( максимальный размер )
                  + fileext ( допустимые расширения )

                 (-) -- not implemented yet.

  -------------------

  // Валидатор

  * Validate()

================================================================== v.0 ( max@ )
*/
$this->UseClass( "Form_FormComponents_validator_base" );

class FormComponent_validator_upload extends FormComponent_validator_base
{
    var $extensions = array(
             "gif", "jpg", "jpe", "png", "bmp", "doc", "rtf", "xls", "csv", "txt", "zip", "gz", "rar",  );
   // VALIDATOR ==============================================================================
   function Validate()
   {
     FormComponent_validator_base::Validate();

     if (!$this->valid) return $this->valid; // ==== strip one

     $this->file_tmp = $_FILES["_".$this->field->name]['tmp_name'];
     $this->file_name = $_FILES["_".$this->field->name]['name'];
     $this->exists = file_exists($this->file_tmp);
	if ($this->exists) {
		$image_info = getimagesize($this->file_tmp);
	}

     if (isset($this->validator_params["maxsize"]))
       if( $this->exists &&
           filesize($_FILES["_".$this->field->name]['tmp_name']) > $this->validator_params["maxsize"])
         $this->_Invalidate( "size_exceeded", "Размер файла больше допустимого ( ".
                             $this->validator_params["maxsize"]." байт )" );	

	// fileext
     if ($this->exists && isset($this->validator_params["fileext"]) && $this->validator_params["fileext"]!= 0)
     {
           if (is_array($this->validator_params["fileext"]) && !empty($this->validator_params["fileext"]))
             $this->extensions = $this->validator_params["fileext"];

           $path_info = pathinfo($this->file_name);
           $ext = strtolower($path_info['extension']);
           if (!in_array($ext, $this->extensions))

           $this->_Invalidate( "extension_failed", "Файл недопустимого типа. ".
                               "Разрешены : ".implode(",",$this->extensions)."." );
     }

	// exclude_fileext
     if ($this->exists && isset($this->validator_params["exclude_fileext"]) && $this->validator_params["exclude_fileext"]!= 0)
     {
           if (is_array($this->validator_params["exclude_fileext"]) && !empty($this->validator_params["exclude_fileext"]))
             $this->exclude_extensions = $this->validator_params["exclude_fileext"];

			$path_info = pathinfo($this->file_name);
			$ext = strtolower($path_info['extension']);
        
           if (in_array($ext, $this->exclude_extensions))
	           $this->_Invalidate( "extension_failed", "Файл недопустимого типа. ".
	                               "Запрещены следующие типы: ".implode(", ",$this->exclude_extensions)."." );
     }

	if ($this->exists && isset($this->validator_params["filetype"]) && $this->validator_params["filetype"] == 'image') {
		if (!$image_info) {
			$this->_Invalidate("file_type", "Неизвестный формат изображения");
		}
	}

	if (($image_info) &&
	 (isset($this->validator_params["max_w"]) || isset($this->validator_params["max_h"]))) {
		if ($image_info[0] > $this->validator_params["max_w"]) $this->_Invalidate("width_exceeded", "Ширина изображения больше допустимого размера (".$this->validator_params["max_w"]." пикс)");
		if ($image_info[1] > $this->validator_params["max_h"]) $this->_Invalidate("height_exceeded", "Высота изображения больше допустимого размера (".$this->validator_params["max_h"]." пикс)");
	}  

	if (($image_info) &&
	 (isset($this->validator_params["fixed_w"]) || isset($this->validator_params["fixed_h"]))) {
		if ($image_info[0] != $this->validator_params["fixed_w"]) $this->_Invalidate("width_noteq", "Ширина изображения имеет не допустимый размер (нужно ".$this->validator_params["fixed_w"]." пикс)");
		if ($image_info[1] != $this->validator_params["fixed_h"]) $this->_Invalidate("height_noteq", "Высота изображения имеет не допустимый размер (нужно ".$this->validator_params["fixed_h"]." пикс)");
	}  

     return $this->valid;
   }

// EOC{ FormComponent_validator_upload }
}


?>
